跳到主要内容

19 DAC

19 DAC原理

Digital-to-Analog Converter 数模转换器

1 💫 DAC 简介​

图片

DAC (Digital-to-Analog Converter)数模转换器,是指将离散的0 1数字信号 转换为 模拟信号的器件

  • F103C8T6 没有内置 DAC, up在扬声器模块下加了一个外置DAC

  • 是12 位精度 所以DAC的输出范围在(0 ~ 4095) 输出精度在(1/4096)

  • 有两个用途:输出波形 和 输出固定电压

1 🔄 DA转换原理​

图片

我们怎么样通过01电平控制开关 从而实现 任意波形 的输出呢?我们可以这样

  • 将电源和地之间的电压通过 n个电阻 将电压分为n等分

  • 然后在每个节点 添加一个开关

  • 需要哪个电压的时候就让这个开关导通 从而输出 对应电压

图片
  • 然后我们再通过 开关的快速切换从而输出 阶梯状波形
  • 这时候我们再简单通过电容滤波一下 就可以得到我们想要的模拟信号了

这就是DA转换的思路 但用这种方式 我们需要n个电阻和 n个开关去实现

图片
  • 如果要将VCC分为 10等分 就需要 10个开关
  • 如果要分为 4096等分 则需要 4096个开关

很显然这太浪费MOS管了 所以我们可以将它改进一下 首先将这个开关改进

图片

通过两个MOS管 我们就可以形成一个 单刀双掷的开关

图片

接着我们再改进一下这个这个电路的连接

  • 我们将一端接地 另一端作为输出

  • 再通过阻值为 2R的电阻连接每个节点 构成一个 T型的电阻网络

  • 然后再将每个2R的一端接到我们改进的单刀双掷开关

图片

我们先将他简化为 3个开关控制的情况

  • 再从左边开始 先看到 第一个开关对应的部分

  • 将后面的电路看为负载 将后面的负载断开

  • 此时我们就可以对这一小部分进行单独的分析

图片

这个黑盒子的 输出电压

  • 很显然两个2R分压 中间点的电压就是 二分之一个VCC
  • 因为此时负载断开 我们也可以叫它 开路电压

然后我们再把黑盒子里面的电 关掉

  • 此时VCC和GND都是 0v 那么我么从输出点看进去很显然 是两个2R电阻的并联
  • 整体的阻值就为R 我们也可以叫它 等效内阻

那么这时候我们就可以把这个黑盒子等效为 一个二分之一VCC的电压源串联一个电阻R

戴维南等效

这样的等效方式在线性电路里面很常用 刚才的操作也可以总结为两步:

  • 去负载求开路电压
  • 独立源置零求等效内阻
图片
图片
图片
  • 接着我们将等效后的部分 放回原来的电路 接着我们再将它 与第二个开关对应的部分进行戴维南等效

  • 此时我们得到的等效电路为 四分之一VCC电压源 串联一个电阻R

  • 我们再将它放回原来的电路 很显然 如果再进行戴维南等效的话 最后的输出电压就是 8分之VCC

通过这几次等效后 我们就可以发现 规律 越左边等效的次数越多 每次等效电压源就变为一半

图片

对于3个开关对应的 3位 最低位为1输出的是 8分之一

  • 也就是 2的3次方分之2的0次方
  • 分母对应的 就是位数 也就是多少bit的精度
  • 分子则对应 具体的输出值
图片

我们再将它拓展到12位

  • 此时分母也就是 2的12次方 分子最低位为1其他为0 也就对应 2的0次方
  • 所以最终的输出值是 4096分之一的VCC

所以通过这样的方式 我们只需要 12个改进后的开关 也就是24个MOS管就可以实现12位的精度

这也就是STM32内部DAC的硬件原理 而这个电路也有它专属的名字 叫做R2R T型电阻网络

2 🌐 DAC外设结构​

图片

我们从信号的 触发 --> 生成 --> 输出 这个流程来分析DAC的结构

  1. 信号触发
  • TIM2,TIM4,TIM5,TIM6,TIM7,TIM8 定时器触发

  • EXTI9外部中断线触发

  • 软件触发

  1. 信号生成
  • DAC受DOR寄存器直接控制的,但是数据并不是直接传入DOR的,需要先传入DHR 之后在间接地传给DOR寄存器

    • 如果没有选择硬件触发(TENx=0),在一个APB1周期后传入DOR

    • 如果选择硬件触发(TENx=1),则在3个APB1周期后传入DOR

  • 一旦数据装入DOR寄存器,在经过时间Testting(大约3us) 之后,输出即有效

  • LFSRx噪声波形模块 线性移位寄存器,生成伪随机噪声数字序列

  • trianglex 三角波模块,自动递增 / 递减数字值;MAMPx[3:0] 设置三角波峰值幅度

  1. 信号输出
  • DAC输出电压 = VREF x (DOR / 4095)

    • DAC电压输出范围为0到参考电压VREF+
备注

这里的 DA转换器 也就是刚刚讲到的R2RT型电阻网络 上面的 DOR 就是控制这12个开关的寄存器

DAC 数据格式

根据上面可知,数据先写入DHR寄存器,然而实际上DHR一共有3个寄存器对应三种数据格式(不通过移位, 减小CPU负担)

  • 8位数据右对齐

  • 12位数据左对齐

  • 12位数据右对齐